package com.data_structure_algorithm.algorithm;

/**
 * @Authror PABLO
 * @Date 2022/4/5 13:19
 * @Desc 汉诺塔
 */
public class Hanoi {
    static int count = 0;

    public static void main(String[] args) {
        char a = 'a';
        char b = 'b';
        char c = 'c';
        hanoi(5, a, b, c);
        System.out.println(count);
    }

    /**
     * @Description: 移动
     * @Author: PABLO
     * @Date: 2022/4/5 13:20
     * @Params: [num 盘子数量,
     * a 柱子，起始点,
     * b 柱子，中转,
     * c 柱子，终点]
     * @Return: void
     **/
    private static void hanoi(int num, char a, char b, char c) {

        //步骤
        //如果是一个盘子，直接a-c
        if (num == 1) {
            count++;
            System.out.println("第" + num + "个盘子，汉诺塔移动 :" + a + "->" + c);
            //如果多 个盘子，看做是两个盘子，最下面一个和上面所有
        } else {
            count++;
            //第一步 ：将上面所有盘子移动到b，借助c
            hanoi(num - 1, a, c, b);
            //第二步 ：移动最下面一个 移动到c
            System.out.println("第" + num + "个盘子，汉诺塔移动 :" + a + "->" + c);
            //第三步 ：将b所有盘子借助a移动到c
            hanoi(num - 1, b, a, c);


        }

    }
}
